﻿Public Class NewManager
    Inherits CoreClass

    ' Gan gia tri cho bien MenuID de kiem tra quyen cua ng dung, gia tri nay lay trog DB va dc fix
    Dim chkMenu As Integer = getIDMenu(14)

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Try
            ' Set sự kiện submit cho nút chỉ định
            Page.Form.DefaultButton = btnSearch.UniqueID
            Page.MaintainScrollPositionOnPostBack = True
            chkPms((CInt(Session("GroupId").ToString())), chkMenu)
            formatCbx()
            If Not Page.IsPostBack Then
                If chkView = 1 Then
                    loadCat()
                    loadStt()
                    formatCbx()
                    BindGrid()
                Else
                    objAlert.ErrorBox(Page, "Bạn không có quyền truy xuất trang này, liên hệ với Admin để biết thêm chi tiết.")
                End If
            End If
        Catch ex As Exception
            Response.Redirect("/Inside/xLogin.aspx?redirect=" & Request.Url.PathAndQuery.Replace("?", "|"))
        End Try
    End Sub

#Region "Các hàm tự viết"

    ' Lấy dữ liệu vào ComboBox Category
    Private Sub loadCat()
        Try
            Dim lst As New List(Of ListItem)
            sql = "spi_CatGetList '1'"
            objData.ExeReader(sql)
            lst.Add(New ListItem(" -- Tất cả danh mục --", "0"))
            Do While objData.dataRead.Read
                lst.Add(New ListItem(objData.dataRead("CatPageName").ToString(), objData.dataRead("listSubCatID").ToString()))
                sql = "spi_getSubCat " & objFunction.ValueCheck(objData.dataRead("CatID").ToString())
                objDataRead.ExeReader(sql)
                Do While objDataRead.dataRead.Read
                    lst.Add(New ListItem(" ---- " & objDataRead.dataRead("SubCatPageName").ToString(), objDataRead.dataRead("SubCatID").ToString()))
                Loop
            Loop
            ' Đưa toàn bộ aray menu vào drop down list
            cbxMenu.Items.AddRange(lst.ToArray)

        Catch ex As Exception
            If objConfig.Developer.Equals("1") Then
                objAlert.ErrorBox(Page, "File: " & (New System.Diagnostics.StackTrace).GetFrame(0).GetMethod.DeclaringType.Name & _
                                  " --- Function: " & (New System.Diagnostics.StackTrace).GetFrame(0).GetMethod.Name & _
                                  " --- Mess: " & ex.Message.Replace("'", """"))
            Else
                objAlert.ErrorBox(Page, "Lỗi kỹ thuật, hãy thông báo lại với Admin, xin cảm ơn.")
            End If
        End Try
    End Sub

    ' Lấy dữ liệu vào ComboBox Status
    Private Sub loadStt()
        Try
            cbxStatus.Items.Insert(0, New ListItem("-- Tất cả --", "-1"))
            cbxStatus.Items.Insert(1, New ListItem("-- Chờ duyệt --", "0"))
            cbxStatus.Items.Insert(2, New ListItem("-- Đã duyệt --", "1"))
        Catch ex As Exception
            If objConfig.Developer.Equals("1") Then
                objAlert.ErrorBox(Page, "File: " & (New System.Diagnostics.StackTrace).GetFrame(0).GetMethod.DeclaringType.Name & _
                                  " --- Function: " & (New System.Diagnostics.StackTrace).GetFrame(0).GetMethod.Name & _
                                  " --- Mess: " & ex.Message.Replace("'", """"))
            Else
                objAlert.ErrorBox(Page, "Lỗi kỹ thuật, hãy thông báo lại với Admin, xin cảm ơn.")
            End If
        End Try
    End Sub

    ' Format màu sắc cho các Drop Down List
    Private Sub formatCbx()
        Try
            ' format cho combo box STATUS
            cbxStatus.Items(1).Attributes.Add("style", "color:red;background-color:White;")
            cbxStatus.Items(2).Attributes.Add("style", "color:green;background-color:White;")

            ' format màu sắc cho combo box DANH MỤC
            cbxMenu.Items(0).Attributes.Add("style", "color:green;background-color:white;")
            ' Định dạng màu sắc cho menu cha
            For i As Integer = 1 To cbxMenu.Items.Count - 1
                Try
                    ' Kiểm tra nếu là Menu cha thi value có dạng: 1,2,3 thì không convert sang Integer được và sẽ nhảy vào Cath để bôi đỏ Menu Cha
                    Integer.Parse(cbxMenu.Items(i).Value)
                Catch ex As Exception
                    ' Tô đậm menu Cha
                    cbxMenu.Items(i).Attributes.Add("style", "color:red;background-color:LightGray;")
                End Try
            Next
        Catch ex As Exception

        End Try
    End Sub

    ' Format Status trên Grid View
    Public Function getColorStt(ByVal stt As Integer) As String
        If stt = 1 Then
            Return "<span style=""font-weight:bold;color: #00CC00""><b>Duyệt</b></span>"
        Else
            Return "<span style=""font-weight:bold;color: #FF0000""><b>Chờ</span>"
        End If
    End Function

    ' Format định dạng tiền VND trên Grid
    Public Function formatCurrency(ByVal currency As String) As String
        Dim temp As Double = Double.Parse(currency)
        Return String.Format("{0:#,##0}", temp)
    End Function

    ' Format Tình Trạng Kho trên Grid View
    Public Function getColorStock(ByVal stt As Integer) As String
        If stt = 1 Then
            Return "<span style=""font-weight:bold;color: #00CC00""><b>Còn</b></span>"
        Else
            Return "<span style=""font-weight:bold;color: #FF0000""><b>Hết</span>"
        End If
    End Function

    ' Lấy dự liệu Bread Crumbs đưa vào Grid View
    Public Sub BindGrid()
        Try
            sql = "spi_getBreadCrumbs "
            If cbxMenu.SelectedValue = "0" Or cbxMenu.SelectedValue = "" Then
                sql &= "''"
            Else
                sql &= "'" & cbxMenu.SelectedValue & "'"
            End If
            sql &= ", '1'" ' 0: Sản Phẩm, 1: Tin Tức
            dsSource.ConnectionString = ConnectionString
            dsSource.SelectCommand = sql

            gridMenu.DataBind()
            If gridMenu.Rows.Count = 0 Then
                objAlert.AlertBox(Page, "Không tìm thấy dữ liệu phù hợp với yêu cầu của bạn, hãy thử lại.")
            End If
        Catch ex As Exception
            If objConfig.Developer.Equals("1") Then
                objAlert.ErrorBox(Page, "File: " & (New System.Diagnostics.StackTrace).GetFrame(0).GetMethod.DeclaringType.Name & _
                                  " --- Function: " & (New System.Diagnostics.StackTrace).GetFrame(0).GetMethod.Name & _
                                  " --- Mess: " & ex.Message.Replace("'", """"))
            Else
                objAlert.ErrorBox(Page, "Lỗi kỹ thuật, hãy thông báo lại với Admin, xin cảm ơn.")
            End If
        End Try
    End Sub

    ' Lấy dự liệu Sản Phẩm đưa vào Grid View Child
    Public Sub BindGridChild(ByVal idCat As Integer, ByVal objGridSubCat As GridView, ByVal sortEx As String)
        Try
            'procedure([dbo].[spi_NewGetList])
            '@SubCatID  nvarchar(100),
            '@Title nvarchar(200),
            '@StartDate nvarchar(50),
            '@EndDate nvarchar(50),
            '@NewStt  nchar(1),
            '@SoftExpress nvarchar(50)
            If sortEx = "" Then
                sortEx = " NewID desc"
            End If
            sql = "select * from Out_New (nolock) where 1 = 1 "
            sql &= " and SubCatID in ('" & idCat & "')"
            If Not txtTitle.Text = "" Then
                sql &= " and NewTitle like N'%" & txtTitle.Text & "%'"
            End If
            If Not (cbxStatus.SelectedValue = "-1" Or cbxStatus.SelectedValue = "") Then
                sql &= " and NewStt =" & cbxStatus.SelectedValue
            End If
            If txtStartDate.Text <> "" Then
                Dim endD As Date
                If txtEndDate.Text <> "" Then
                    endD = Date.Parse(objFunction.formatDateVNtoGlobal(txtEndDate.Text))
                Else
                    endD = Date.Parse(objFunction.formatDateVNtoGlobal(txtStartDate.Text))
                End If
                endD = endD.AddDays(1)
                sql &= " and NewDate >= '" & objFunction.convertDateVNtoOther(txtStartDate.Text, "ymd") & " ' and NewDate < '" & endD.Year & "-" & endD.Month & "-" & endD.Day & "'"
            End If
            If cbxStatus.SelectedValue = 2 Then
                sql &= " order by " & sortEx
            Else
                sql &= " and NewStt not in(2) order by " & sortEx
            End If

            'MsgBox(sql)
            'lbSql.Text = sql
            Dim dts As DataSet = objDataRead.ExeDataset(sql)
            Dim dtt As DataTable = dts.Tables(0)

            objGridSubCat.DataSource = dtt
            objGridSubCat.DataBind()

        Catch ex As Exception
            If objConfig.Developer.Equals("1") Then
                objAlert.ErrorBox(Page, "File: " & (New System.Diagnostics.StackTrace).GetFrame(0).GetMethod.DeclaringType.Name & _
                                  " --- Function: " & (New System.Diagnostics.StackTrace).GetFrame(0).GetMethod.Name & _
                                  " --- Mess: " & ex.Message.Replace("'", """"))
            Else
                objAlert.ErrorBox(Page, "Lỗi kỹ thuật, hãy thông báo lại với Admin, xin cảm ơn.")
            End If
        End Try
    End Sub

    ' Format Bread Crumbs trên Grid View
    Public Function showBreadCrumbs(ByVal cat As String, ByVal subCat As String) As String
        Return "<span style=""color: white"">" & cat & "<span style=""color: black""> &nbsp; >> &nbsp; </span><span style=""font-weight:bold;"">" & subCat & "</span></span>"
    End Function

    ' Format Link Detail Product trên Grid View
    Public Function formatLink(ByVal id As String) As String
        Return "~/Inside/Web/New/NewDetail.aspx?id=" & id
    End Function

    ' Hàm load dữ liệu cho combo box status sản phẩm
    Private Sub BindStatus(ByVal cbo As DropDownList, ByVal stt As Integer)
        Try
            cbo.Items.Insert(0, New ListItem("Chờ", "0"))
            cbo.Items.Insert(1, New ListItem("Duyệt", "1"))
            cbo.Items(0).Attributes.Add("style", "color:red;background-color:White;")
            cbo.Items(1).Attributes.Add("style", "color:green;background-color:White;")
            cbo.SelectedValue = stt
        Catch ex As Exception
            If objConfig.Developer.Equals("1") Then
                objAlert.ErrorBox(Page, "File: " & (New System.Diagnostics.StackTrace).GetFrame(0).GetMethod.DeclaringType.Name & _
                                  " --- Function: " & (New System.Diagnostics.StackTrace).GetFrame(0).GetMethod.Name & _
                                  " --- Mess: " & ex.Message.Replace("'", """"))
            Else
                objAlert.ErrorBox(Page, "Lỗi kỹ thuật, hãy thông báo lại với Admin, xin cảm ơn.")
            End If
        End Try

    End Sub

    ' function convert mã &# thành unicode
    Function formatUnicode(ByVal str As String) As String
        Return objFunction.QuoteToUnicode(str)
    End Function

    ' Ham hien thi ngay thang tren grid view
    Public Function formatTime(ByVal str As String) As String
        Dim tempDate As New Date
        tempDate = CDate(str)
        Dim strDateReturn = tempDate.Day & "-" & tempDate.Month & "-" & tempDate.Year
        Dim strTimeReturn = tempDate.Hour & ":" & tempDate.Minute
        Return strDateReturn & "<span style=""font-style:italic;font-size:11px;color: #808080"">(" & strTimeReturn & ")</span>"
    End Function

#End Region

#Region "Các sự kiện của Component"

#Region "Grid Cha Bread Crumbs"
    ' Gọi sự kiện bind data cho Grid Child mỗi khi Grid Bread Crumbs tạo ra 1 record
    Private Sub gridMenu_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles gridMenu.RowDataBound
        Try
            ' Khai bao doi tuong label de lay ID category
            Dim lbIDCat As Label = CType(e.Row.FindControl("lbl_ID"), Label)
            ' Khai bao bien ID category luu gia tri cua label ID
            Dim idCat As Integer = Integer.Parse(lbIDCat.Text)
            ' Khai bao doi tuong grid Sub Cat de fill du lieu
            Dim objGrid As GridView = CType(e.Row.FindControl("gridChild"), GridView)
            BindGridChild(idCat, objGrid, "")
        Catch ex As Exception

        End Try
    End Sub

#End Region

#Region "Grid Sub Product"

    ' Tô màu cho từng dòng khi có sự kiện tạo row
    Protected Sub gridChild_RowCreated(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs)
        'Add CSS class on normal row.
        If e.Row.RowType = DataControlRowType.DataRow And e.Row.RowState = DataControlRowState.Normal Then
            e.Row.CssClass = "alt1"
        End If
        'Add CSS class on alternate row.
        If e.Row.RowType = DataControlRowType.DataRow And e.Row.RowState = DataControlRowState.Alternate Then
            e.Row.CssClass = "alt"
        End If
    End Sub

    ' Mỗi khi có row đc tạo ra thì bind dữ liệu vào combo box Status và apply giá trị Status của từng Product cho combo box đó
    Protected Sub gridChild_OnRowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs)
        If e.Row.RowType = DataControlRowType.DataRow Then
            ' Khai bao DropdownList de bind du lieu
            Dim cbo As DropDownList = CType(e.Row.FindControl("ddlStt"), DropDownList)
            ' Khai bao 1 Label de lay gia tri Status 
            Dim lbStt As Label = CType(e.Row.FindControl("lbStt"), Label)
            ' Khai bao bien integer luu gia tri cua Status Product
            Dim stt As Integer = Integer.Parse(lbStt.Text)
            If Not cbo Is Nothing Then BindStatus(cbo, stt)
        End If
    End Sub

    ' Sự kiện chuyển trang của Grid con
    Protected Sub gridChild_PageIndexChanging(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewPageEventArgs)
        Try
            ' Khai bao object Grid sub
            Dim gridChild As GridView = CType(sender, GridView)
            ' Khai bao label de lay ID sub cat
            Dim lblId As Label = CType(gridChild.Rows(0).FindControl("lblSubCatID"), Label)
            ' Khai bao bien ID category luu gia tri cua label ID
            Dim idSub As Integer = Integer.Parse(lblId.Text)
            ' Set lại trang mới cho Grid View con
            gridChild.PageIndex = e.NewPageIndex
            ' Bind lai du lieu
            BindGridChild(idSub, gridChild, "")
        Catch ex As Exception

        End Try
    End Sub

    ' Sự kiện sắp xếp của Grid con
    Protected Sub gridChild_Sorting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewSortEventArgs)
        Try
            ' Khai bao object Grid sub
            Dim gridChild As GridView = CType(sender, GridView)
            ' Khai bao label de lay ID sub cat
            Dim lblId As Label = CType(gridChild.Rows(0).FindControl("lblSubCatID"), Label)
            ' Khai bao bien ID category luu gia tri cua label ID
            Dim idSub As Integer = Integer.Parse(lblId.Text)
            ' Khai báo biến để lấy cột đc yêu cầu sắp xếp
            Dim sortEx As String = e.SortExpression
            ' Lấy chiều sắp xếp từ 1 label và sắp xếp xong thì đảo chiều cho label để dùng lại, nếu không đảo thì chỉ sắp xếp đc 1 chiều
            If lbSort.Text = "ASC" Then
                ' Nếu là sắp xếp theo ASC thì sau khi xong phải gán lại là DESC để lân tới sẽ là theo DESC
                sortEx &= " ASC"
                lbSort.Text = "DESC"
            Else
                sortEx &= " DESC"
                lbSort.Text = "ASC"
            End If
            BindGridChild(idSub, gridChild, sortEx)
        Catch ex As Exception

        End Try
    End Sub

    ' Sự kiện Edit của Grid con
    Protected Sub gridChild_RowEditing(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewEditEventArgs)
        ' Khai bao object Grid sub
        Dim gridChild As GridView = CType(sender, GridView)
        gridChild.EditIndex = e.NewEditIndex
        Dim lblId As Label = CType(gridChild.Rows(gridChild.EditIndex).FindControl("lblSubCatID"), Label)
        ' Khai bao bien ID category luu gia tri cua label ID
        Dim idSub As Integer = Integer.Parse(lblId.Text)
        ' Bind lai du lieu
        BindGridChild(idSub, gridChild, "")
        gridChild.Rows(gridChild.EditIndex).Focus()
    End Sub

    ' Hủy edit tại grid view san pham
    Protected Sub gridChild_RowCancelingEdit(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCancelEditEventArgs)
        Dim gridChild As GridView = CType(sender, GridView)
        Dim lblId As Label = CType(gridChild.Rows(gridChild.EditIndex).FindControl("lblSubCatID"), Label)
        ' Khai bao bien ID category luu gia tri cua label ID
        Dim idSub As Integer = Integer.Parse(lblId.Text)
        gridChild.EditIndex = -1
        BindGridChild(idSub, gridChild, "")
    End Sub

    ' Gọi lệnh Update sau khi click button SAVE lúc Edit row Sub Grid View Category
    Protected Sub gridChild_OnRowUpdating(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewUpdateEventArgs)
        ' Goi ham kiem tra quyen update
        If Not chkUpdate = 1 Then
            objAlert.ErrorBox(Page, "Bạn không có quyền sử dụng tính năng này. <br><br>Liên hệ với Admin để biết thêm chi tiết.")
            e.Cancel = True
            Exit Sub
        End If
        Try
            Dim gridChild As GridView = CType(sender, GridView)
            Dim lblId As Label = CType(gridChild.Rows(e.RowIndex).FindControl("lbl_ID"), Label)
            Dim txtName As TextBox = CType(gridChild.Rows(e.RowIndex).FindControl("NewTitle"), TextBox)
            Dim ddlStt As DropDownList = DirectCast(gridChild.Rows(e.RowIndex).FindControl("ddlStt"), DropDownList)
            
            sql = "spi_NewUpdateOnGrid "
            sql &= objFunction.ValueCheck(lblId.Text) & ", " '@NewID int, 0 = INSERT, >0=UPDATE
            sql &= objFunction.FieldUniCk(txtName.Text.Replace("'", "''''")) & ", " '@NewTitle nvarchar(200),
            sql &= objFunction.ValueCheck(ddlStt.SelectedValue) '@NewStt tinyint, 0 = WAIT, 1 = SHOW, 2 = DELETE

            objData.ExeNonQuery(sql)
            'lbSql.Text = sql
            gridChild.EditIndex = -1
            BindGrid()
            objFunction.writeLog(Session("UserId"), 2, "Update Tin bài", "ID tin bài: " & lblId.Text, "Tiêu đề mới: " & txtName.Text.Replace("'", ""))
        Catch ex As Exception
            If objConfig.Developer.Equals("1") Then
                objAlert.ErrorBox(Page, "File: " & (New System.Diagnostics.StackTrace).GetFrame(0).GetMethod.DeclaringType.Name & _
                                   " --- Function: " & (New System.Diagnostics.StackTrace).GetFrame(0).GetMethod.Name & _
                                   " --- Mess: " & ex.Message.Replace("'", """"))
            Else
                objAlert.ErrorBox(Page, "Lỗi kỹ thuật, hãy thông báo lại với Admin, xin cảm ơn.")
            End If
        End Try
    End Sub

    ' Gọi lệnh Delete sau khi click vào nút Delete
    Protected Sub gridChild_OnRowDeleting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewDeleteEventArgs)
        ' Goi ham kiem tra quyen update
        If Not chkDelete = 1 Then
            objAlert.ErrorBox(Page, "Bạn không có quyền sử dụng tính năng này. <br><br>Liên hệ với Admin để biết thêm chi tiết.")
            e.Cancel = True
            Exit Sub
        End If
        Try
            Dim gridChild As GridView = CType(sender, GridView)
            Dim lblId As Label = CType(gridChild.Rows(e.RowIndex).FindControl("lbl_ID"), Label)
            Dim lbl_Name As Label = CType(gridChild.Rows(e.RowIndex).FindControl("lbl_Name"), Label)
            sql = "update Out_New set NewStt = 2 where NewID = " & objFunction.ValueCheck(lblId.Text)
            objData.ExeNonQuery(sql)
            objFunction.writeLog(Session("UserId"), 0, "Xóa tạm thời tin bài", "ID tin bài: " & lblId.Text, "Tiêu đề: " & lbl_Name.Text.Replace("'", ""))
            gridChild.EditIndex = -1
            BindGrid()
        Catch ex As Exception
            If objConfig.Developer.Equals("1") Then
                objAlert.ErrorBox(Page, "File: " & (New System.Diagnostics.StackTrace).GetFrame(0).GetMethod.DeclaringType.Name & _
                                  " --- Function: " & (New System.Diagnostics.StackTrace).GetFrame(0).GetMethod.Name & _
                                  " --- Mess: " & ex.Message.Replace("'", """"))
            Else
                objAlert.ErrorBox(Page, "Lỗi kỹ thuật, hãy thông báo lại với Admin, xin cảm ơn.")
            End If
        End Try
    End Sub

#End Region

#End Region

    Private Sub btnSearch_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnSearch.Click
        If Not chkView = 1 Then
            objAlert.ErrorBox(Page, "Bạn không có quyền sử dụng tính năng này. <br><br>Liên hệ với Admin để biết thêm chi tiết.")
            Exit Sub
        End If
        BindGrid()
    End Sub
End Class